/***********************************************************************************************************************************
Filter Group
***********************************************************************************************************************************/
#ifndef IO_FILTER_GROUP_H
#define IO_FILTER_GROUP_H

/***********************************************************************************************************************************
Storage file read object
***********************************************************************************************************************************/
typedef struct IoFilterGroup IoFilterGroup;

#include "common/io/filter/filter.h"
#include "common/type/string.h"

/***********************************************************************************************************************************
Constructor
***********************************************************************************************************************************/
IoFilterGroup *ioFilterGroupNew(void);

/***********************************************************************************************************************************
Functions
***********************************************************************************************************************************/
void ioFilterGroupAdd(IoFilterGroup *this, IoFilter *filter);
void ioFilterGroupProcess(IoFilterGroup *this, const Buffer *input);
void ioFilterGroupClose(IoFilterGroup *this);

/***********************************************************************************************************************************
Getters
***********************************************************************************************************************************/
const Variant *ioFilterGroupResult(const IoFilterGroup *this, const String *filterType);

/***********************************************************************************************************************************
Destructor
***********************************************************************************************************************************/
void ioFilterGroupFree(IoFilterGroup *this);

/***********************************************************************************************************************************
Macros for function logging
***********************************************************************************************************************************/
#define FUNCTION_DEBUG_IO_FILTER_GROUP_TYPE                                                                                          \
    IoFilterGroup *
#define FUNCTION_DEBUG_IO_FILTER_GROUP_FORMAT(value, buffer, bufferSize)                                                             \
    objToLog(value, "IoFilterGroup", buffer, bufferSize)

#endif
